package club.yunqiang.service;

import club.yunqiang.dto.ModifyDBInstanceConnection;
import club.yunqiang.dto.ModifyDBInstanceNetworkExpireTime;
import com.aliyuncs.rds.model.v20140815.*;

/**
 * @author YunQiang
 */
public interface RdsSdkService {

    /**
     * 01申请实例的外网连接串
     *
	 * @param connectionStringPrefix 连接串的前缀
     * @return RequestId（请求ID）
     */
    AllocateInstancePublicConnectionResponse allocateInstancePublicConnection(String connectionStringPrefix);

    /**
     * 02查看实例的所有连接信息
     *
     * @return 数据库连接信息
     */
    DescribeDBInstanceNetInfoResponse describeDBInstanceNetInfo();

    /**
     * 03修改连接串的名字和端口;
     * 目前，RDS提供内网和外网两种连接串。在特定的访问模式下，内外网可以共存
	 *
     * @param modifyDBInstanceConnection
     * @return RequestId（请求ID）
     */
    ModifyDBInstanceConnectionStringResponse modifyDBInstanceConnectionString(ModifyDBInstanceConnection modifyDBInstanceConnection);

    /**
     * 04修改连接地址过期时间
     *
	 * @param modifyDBInstanceNetworkExpireTime
     * @return RequestId（请求ID）
     */
    ModifyDBInstanceNetworkExpireTimeResponse modifyDBInstanceNetworkExpireTime(ModifyDBInstanceNetworkExpireTime modifyDBInstanceNetworkExpireTime);

    /**
     * 05修改RDS实例网络类型，即在经典网络和VPC网络间进行切换
     *
     * @return RequestId（请求ID）、TaskId（任务ID）
	 * @param instanceNetworkType
     */
    ModifyDBInstanceNetworkTypeResponse modifyDBInstanceNetworkType(String instanceNetworkType);

    /**
     * 06释放实例的外网连接串
     *
     * @return RequestId（请求ID）
	 * @param currentConnectionString
     */
    ReleaseInstancePublicConnectionResponse releaseInstancePublicConnection(String currentConnectionString);

    /**
     * 07申请内网连接串（原内外网切换）
     *
     * @return RequestId（请求ID）
	 * @param connectionStringPrefix
     */
    SwitchDBInstanceNetTypeResponse switchDBInstanceNetType(String connectionStringPrefix);
}
